/**
 * 判断数据类型
 * @param data
 * @return {String}
 * **/
export const TypeOf = data => {
  const toString = Object.prototype.toString;
  const map = {
    '[object Boolean]': 'boolean',
    '[object Number]': 'number',
    '[object String]': 'string',
    '[object Function]': 'function',
    '[object Array]': 'array',
    '[object Date]': 'date',
    '[object RegExp]': 'regExp',
    '[object Undefined]': 'undefined',
    '[object Null]': 'null',
    '[object Object]': 'object',
    '[object FormData]': 'formData'
  };
  return map[toString.call(data)];
};

/**
 * 延迟函数
 * @param ms
 * */
export const delay = ms =>
  new Promise(resolve => {
    const time = setTimeout(() => {
      resolve();
      clearTimeout(time);
    }, ms);
  });

/**
 * 防抖函数
 * @param {Function} func 调用函数
 * @param {Number} wait 延迟时间
 * @param {Boolean} immediate 是否立即执行一次
 * @return {Function}
 * */
export function debounce(func, wait, immediate) {
  if (immediate) {
    func();
  }
  let timeId;
  return () => {
    clearTimeout(timeId);
    timeId = setTimeout(() => {
      func();
    }, wait);
  };
}

/**
 * 身份证号正则检验
 * @param {String} idCard 身份证号
 * @return {Boolean}
 * */
export const checkIdCard = idCard => {
  // 身份证号正则表达式
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if (!idCard) return false;
  return reg.test(idCard);
};

/**
 * 获取平台
 * @return {String} 平台名称
 * */
export const getPlatform = () => {
  if (typeof navigator !== 'undefined') {
    const index = navigator.userAgent.toLowerCase().indexOf('mobile') !== -1;
    return index ? 'mobile' : 'web';
  } else {
    return 'web';
  }
};
